package controller; import java.util.Iterator; import java.util.TreeSet; import models.Product; public class Warehouse { /** * The class that holds all products */ public static Warehouse instance; private TreeSet<Product> warehouse; private InputOutput inOut; private Iterator<Product> iterator; private static final int MAXIMUM_STOCK = 1000; private static final int MINIMUM_STOCK = 100; private Warehouse() { inOut = new InputOutput(); warehouse = inOut.deserializeProducts(); } public static Warehouse getInstance() { if (instance == null) { instance = new Warehouse(); } return instance; } public static int getMaximumStock() { return MAXIMUM_STOCK; } public static int getMinimumStock() { return MINIMUM_STOCK; } public void addProduct(Product product) { if (warehouse.contains(product)) { iterator = warehouse.iterator(); while (iterator.hasNext()) { Product p = iterator.next(); if (product.equals(p)) { p.setStock(p.getStock() + product.getStock()); break; } } } else { warehouse.add(product); } inOut.serializeProducts(); } public void removeProduct(Product product) { if (warehouse.contains(product)) { warehouse.remove(product); inOut.serializeProducts(); } } public int getTotalNumberOfProducts() { int total = 0; iterator = warehouse.iterator(); while (iterator.hasNext()) { total += iterator.next().getStock(); } return total; } public Product[] getAllProducts() { int size = warehouse.size(), index = 0; if (size != 0) { Product[] products = new Product[size]; iterator = warehouse.iterator(); while (iterator.hasNext()) { Product product = iterator.next(); products[index++] = product; } return products; } return null; } public int getProductStock(Product product) { if (warehouse.contains(product)) { iterator = warehouse.iterator(); while (iterator.hasNext()) { Product p = iterator.next(); if (product.equals(p)) { return p.getStock(); } } } return 0; } public void sellProduct(Product product) { if (warehouse.contains(product)) { iterator = warehouse.iterator(); while (iterator.hasNext()) { Product p = iterator.next(); if (product.equals(p)) { p.setStock(p.getStock() - product.getStock()); break; } } inOut.serializeProducts(); } } public boolean searchForProduct(Product product) { return warehouse.contains(product); } }